package GenericMain;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class User implements Comparable<User> {
	private int age;

	public User(int age) {
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	@Override
	public int compareTo(User o) {

		return age - o.age;
	}

	@Override
	public String toString() {
		return "User [age=" + age + "]";
	}

}

class StuUser extends User {
	private String no;

	public StuUser(int age, String no) {
		super(age);
		this.no = no;
	}

	public String getNo() {
		return no;
	}

	@Override
	public String toString() {
		return "StuUser [no=" + no + ", toString()=" + super.toString() + "]";
	}

}

class UserReverseComparator implements Comparator<User> {

	@Override
	public int compare(User o1, User o2) {
		return o2.getAge() - o1.getAge();
	}

}

class StuUserComparator implements Comparator<StuUser> {

	@Override
	public int compare(StuUser o1, StuUser o2) {
		return o1.getNo().compareTo(o2.getNo());
	}

}

public class GenericMain {
	public static <T extends Comparable<T>> T max(List<T> list)
	   {                     
	      T max = list.get(0);
	      for (int i=0;i<list.size();i++) {
	        if ( list.get(i).compareTo( max ) > 0 ){
	         max = list.get(i); 
	      }
	    }
	      return max; 
	   }
	public static void main(String[] args) {
		ArrayList<String> strList = new ArrayList<String>();
		strList.add("ads");
		strList.add("bbs");
		strList.add("bbc");
		String max = max(strList);
		System.out.println(max(strList));
	}
}
